Chargement et installation des packages
install.packages(c("vegan", "reshape2", "labdsv", "pgirmess"))
library(vegan)
library(reshape2)
library(labdsv)
library(pgirmess)
Chargement des donnees
donneesBrutes <-
read.table(
file = "Base_de_donnees_2018-2019.txt",
header = TRUE,
sep = "\t",
dec = ",",
stringsAsFactors = TRUE # Assure que les chaîne de caractères soient enregistrées en facteurs
)
Verifications du tableau
nrow(donneesBrutes)
1042 lignes, 1043 sur Excel - 1 pour les headers, check
str(donneesBrutes)
colonnes identifiees correctement comme facteurs
date: integer numeric, parfait
rep: convertir en factor, on remplace 'rep' en caractères par 'rep' en facteur
class(donneesBrutes$rep)
donneesBrutes$rep <- as.factor(donneesBrutes$rep)
class(donneesBrutes$rep)
mod: 10 level, il y a un soucis
levels(donneesBrutes$mod) # Différents niveaux pour la même chose
levels(donneesBrutes$mod) <- c("B", "B", "H", "H", "H", "M", "M", "M", "M", "M") # On remplace ces niveaux
levels(donneesBrutes$mod) # check, mais l'ordre n'est pas le bon
donneesBrutes$mod <- factor(x = donneesBrutes$mod, # Le facteur à modifier
levels = c("H", "M", "B"), # L'ordre souhaité des niveaux
ordered = TRUE) # Oui, l'ordre doit être maintenu comme tel
levels(donneesBrutes$mod) # check
horiz: 10 niveaux de facteur, ça parait beaucoup
levels(donneesBrutes$horiz) # Même chose qu'au dessus, nomenclatures différentes pour la même chose
levels(donneesBrutes$horiz) <- c("A", "O", "O", "O", "OF", "OH", "OL", "A", "A", "A")
levels(donneesBrutes$horiz) # check
var: 18 niveaux de facteur, ça fait beaucoup, vérifier
levels(donneesBrutes$var) # Ok, répétitions, doublons, nettoyer
levels(donneesBrutes$var) <- c("macro", rep("epaisseur", 5),
rep("macro", 3), # répéter "macro" trois fois, correspond à c("macro", "macro", "macro")
"HR", "HR", rep("macro", 5), "pH", "pH")
levels(donneesBrutes$var) # check
grp: 5 niveaux?
levels(donneesBrutes$grp) # Ok, il y a un "2B." en trop
levels(donneesBrutes$grp) <- c("1A", "1B", "2A", rep("2B", 2))
levels(donneesBrutes$grp) # Parfait, plus que 4 groupes
Derniere verification
str(donneesBrutes)
ça a l'air bon, on peut continuer
Création d'un code unique par point d'échantillonnage
exemples
paste("a", "b", "c", sep = "_")
paste(c("a", "b", "c"), c(1,2,3), c("x", "y", "z"), sep = "_")
application
donneesBrutes$code <- # création d'une nouvelle colonne dans le tableau
paste(donneesBrutes$grp, # colle l'ensemble des éléments de 'grp'
donneesBrutes$mod, # aux éléments correspondant dans 'mod'
donneesBrutes$rep, # puis dans 'rep'
substr(x = donneesBrutes$horiz, # sélectionner uniquement le premier caractère de l'horizon
start = 1, stop = 1), # extrait donc "O" de "OL" et de "OF"
sep = "_") # colle les différentes colonnes en séparant par des "_": par exemple 1B_H_2_A
donneesBrutes$code <- as.factor(donneesBrutes$code) # transformation en facteur
levels(donneesBrutes$code) # vérification, 117 valeurs uniques
sort(levels(donneesBrutes$code)) # ordination des codes pour vérification
72 valeurs, check
Séparation des données par type (i.e. un data.frame pour le pH, un pour l'humidité, etc)
exemple simple
x <- c(1,2,3,4,5,6) # vecteur de valeurs
f <- factor(c("a", "a", "a", "b", "b", "b")) # factor de découpage du vecteur
listeTest <- split(x = x, f = f) # application du découpage de x par f grâce à al fonction split()
listeTest$a # accès facile à chaque tableau
rm(list = c("x", "f", "listeTest")) # nettoyage de l'environnement de travail
application
donneesListe <- # création d'une nouvelle variable, une liste
split( # fonction permettant un "subset" automatique en fonction d'un facteur
x = donneesBrutes, # données à couper
f = donneesBrutes$var # facteur utilisé pour le découpage, ici les différents types de données
à savoir pH, HR, epaisseur et macro.
)
names(donneesListe) # On a bien nos quatres types de données séparées
lapply(donneesListe, head) # Applique la fonction 'head()' à chaque élément de la liste
Création de tableaux croisés pour analyse
Humidité relative
head(donneesListe$HR) # voir la partie supérieure du tableau
class(donneesListe$HR) # il s'agit d'un data.frame
str(donneesListe$HR) # structure du data.frame
donneesListe$HR$val <- as.character(donneesListe$HR$val) # transformation d'un factor en character
donneesListe$HR$val <- gsub(pattern = ",", # Elément recherch": ,
replacement = ".", # A remplacer par: .
x = donneesListe$HR$val) # dans ce vecteur
donneesListe$HR$val <- as.numeric(donneesListe$HR$val) # transformation des lettres en valeurs numériques
str(donneesListe$HR) # vérification du contenu du tableau
HR <- data.frame(grp = donneesListe$HR$grp, # à gauche du "=": nom de la colonne/objet
dat = donneesListe$HR$dat, # à droite du "=": données à placer dans l'objet
mod = donneesListe$HR$mod,
rep = donneesListe$HR$rep,
horiz = donneesListe$HR$horiz,
HR = donneesListe$HR$val) # Création d'un tableau avec les bonnes valeurs
dim(HR) # 36 lignes, 6 colonnes, c'est bon
rownames(HR) <- donneesListe$HR$code # utilise le code unique comme nom de lignes
HR <- HR[order(rownames(HR)),] # Réordonne le tableau dans l'ordre des rownames
exemple
vector <- c(4,3,5,1,2)
order(vector)
vector[order(vector)]
rm("vector")
Potentiel hydrogène, même chose qu'au dessus mais pour le pH
head(donneesListe$pH)
class(donneesListe$pH)
str(donneesListe$pH)
donneesListe$pH$val <- as.character(donneesListe$pH$val)
donneesListe$pH$val <- gsub(pattern = ",",
replacement = ".",
x = donneesListe$pH$val)
donneesListe$pH$val <- as.numeric(donneesListe$pH$val)
str(donneesListe$pH)
pH <- data.frame(grp = donneesListe$pH$grp,
dat = donneesListe$pH$dat,
mod = donneesListe$pH$mod,
rep = donneesListe$pH$rep,
horiz = donneesListe$pH$horiz,
pH = donneesListe$pH$val)
dim(pH) # 36 lignes, 6 colonnes, c'est bon
rownames(pH) <- donneesListe$pH$code
pH <- pH[order(rownames(pH)),]
Macrofaune
str(donneesListe$macro) # ok, il reste des niveaux de facteurs inutiles dans 'val' et 'horiz'
donneesListe$macro$val <- factor(donneesListe$macro$val) # réappliquer 'factor()' retire les niveaux inutiles
str(donneesListe$macro) # Parfait
macro <- dcast(data = donneesListe$macro, # source des données
formula = code ~ val, # formule à appliquer: 'code' en lignes et 'val'
# (i.e. Espèces, Ordres, etc) en colonnes
fun.aggregate = length,
fill = 0) # Que faire si valeurs manquantes. S'agissant d'abondances les valeurs
# vides sont bien des 0
La formule au dessus trouve dans 'data' tous les cas pour chaque combinaison code~val.
L'argument 'fun.aggregate =' stipule quoi faire avec ces données.
La fonction 'length()' permet de compter le nombre de valeurs correspondant à cette combinaison
Permet donc de déterminer une abondance, à savoir le nombre d'individus de l'espèce/ordre donné par 'val' pour une valeur de 'code', à savoir pour un point d'échatillonnage donné
dim(macro) # Seulement 70 lignes, il manque 2 valeurs.
summary(macro$code) # Il manque les valeurs pour '1B_B_3_A' (pas de données dans le tableau)
# et '1B_M_3_A' (même chose)
# Pilluliers vide? Données on rentrée?
# Dans le doute, NA
macro <- rbind(macro, NA, NA) # Ajout de deux lignes vides à 'macro'
macro$code[71:72] <- c("1B_B_3_A", "1B_M_3_A")
rownames(macro) <- macro$code # le code unique comme rownames
macro <- macro[,-1] # on retire la colonne 1, qui contient le code est maintenant en rownames
On ordonne le tableau comme avec les rownames
macro <- macro[order(rownames(macro)),]
On rajoute des colonnes avec les modalités au tableau, on extrait directement les informations des noms de ligne
rownames(macro)
macro$grp <- as.factor(substr(rownames(macro), 1, 2))
macro$mod <- as.factor(substr(rownames(macro), 4, 4))
macro$rep <- as.factor(substr(rownames(macro), 6, 6))
macro$horiz <- as.factor(substr(rownames(macro), 8, 8))
La suite dans "script_analyses_L3EBO_2018-2018.R"
Il manque un, ou plusieurs, tableaux pour les épaisseurs des différents horizons